project('libhandy', 'c',
          version: '1.8.0',
          license: 'LGPL-2.1-or-later',
    meson_version: '>= 0.49.0',
  default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ],
)

version_arr = meson.project_version().split('.')
handy_version_major = version_arr[0].to_int()
handy_version_minor = version_arr[1].to_int()
handy_version_micro = version_arr[2].to_int()

# The major api version as encoded in the libraries name
apiversion = '1'
# The so major version of the library
soversion = 0
package_api_name = '@0@-@1@'.format(meson.project_name(), apiversion)

if handy_version_minor.is_odd()
  handy_interface_age = 0
else
  handy_interface_age = handy_version_micro
endif

# maintaining compatibility with libtool versioning
# current = minor * 100 + micro - interface
# revision = interface
current = handy_version_minor * 100 + handy_version_micro - handy_interface_age
revision = handy_interface_age
libversion = '@0@.@1@.@2@'.format(soversion, current, revision)

add_project_arguments([
  '-DHAVE_CONFIG_H',
  '-DHANDY_COMPILATION',
  '-I' + meson.build_root(),
], language: 'c')

root_inc = include_directories('.')
src_inc = include_directories('src')

cc = meson.get_compiler('c')

global_c_args = []
test_c_args = [
  '-Wcast-align',
  '-Wdate-time',
  '-Wdeclaration-after-statement',
  ['-Werror=format-security', '-Werror=format=2'],
  '-Wendif-labels',
  '-Werror=incompatible-pointer-types',
  '-Werror=missing-declarations',
  '-Werror=overflow',
  '-Werror=return-type',
  '-Werror=shift-count-overflow',
  '-Werror=shift-overflow=2',
  '-Werror=implicit-fallthrough=3',
  '-Wformat-nonliteral',
  '-Wformat-security',
  '-Winit-self',
  '-Wmaybe-uninitialized',
  '-Wmissing-field-initializers',
  '-Wmissing-include-dirs',
  '-Wmissing-noreturn',
  '-Wnested-externs',
  '-Wno-missing-field-initializers',
  '-Wno-sign-compare',
  '-Wno-strict-aliasing',
  '-Wno-unused-parameter',
  '-Wold-style-definition',
  '-Wpointer-arith',
  '-Wredundant-decls',
  '-Wshadow',
  '-Wstrict-prototypes',
  '-Wswitch-default',
  '-Wswitch-enum',
  '-Wtype-limits',
  '-Wundef',
  '-Wunused-function',
]

target_system = target_machine.system()

if get_option('buildtype') != 'plain'
  if target_system == 'windows'
    test_c_args += '-fstack-protector'
  else
    test_c_args += '-fstack-protector-strong'
  endif
endif
if get_option('profiling')
  test_c_args += '-pg'
endif

foreach arg: test_c_args
  if cc.has_multi_arguments(arg)
    global_c_args += arg
  endif
endforeach
add_project_arguments(
  global_c_args,
  language: 'c'
)

# Setup various paths that subdirectory meson.build files need
package_subdir = get_option('package_subdir') # When used as subproject
if package_subdir != ''
  datadir    = get_option('datadir') / package_subdir
  libdir     = get_option('libdir')  / package_subdir
  girdir     = get_option('datadir') / package_subdir / 'gir-1.0'
  typelibdir = get_option('libdir')  / package_subdir / 'girepository-1.0'
  vapidir    = get_option('datadir') / package_subdir / 'vapi'
else
  datadir    = get_option('datadir')
  libdir     = get_option('libdir')
  girdir     = get_option('datadir') / 'gir-1.0'
  typelibdir = get_option('libdir')  / 'girepository-1.0'
  vapidir    = get_option('datadir') / 'vala' / 'vapi'
endif

glade_catalog_feature = get_option('glade_catalog')
gladeui_dep = dependency('gladeui-2.0', required : glade_catalog_feature)
glade_catalog = not glade_catalog_feature.disabled() and gladeui_dep.found()

introspection_feature = get_option('introspection')
introspection = introspection_feature.enabled() or introspection_feature.auto()

gnome = import('gnome')

subdir('src')
subdir('po')
subdir('examples')
subdir('tests')
subdir('doc')
subdir('glade')

run_data = configuration_data()
run_data.set('ABS_BUILDDIR', meson.current_build_dir())
run_data.set('ABS_SRCDIR', meson.current_source_dir())
configure_file(
          input: 'run.in',
         output: 'run',
  configuration: run_data)

if not meson.is_subproject()
    meson.add_dist_script('build-aux'/ 'meson'/ 'dist-data.py')
endif

summary = [
  '',
  '------',
  'Handy @0@ (@1@)'.format(current, apiversion),
  '',
  '             Tests: @0@'.format(get_option('tests')),
  '          Examples: @0@'.format(get_option('examples')),
  '     Documentation: @0@'.format(get_option('gtk_doc')),
  '     Introspection: @0@'.format(introspection),
  '              Vapi: @0@'.format(get_option('vapi')),
  '     Glade Catalog: @0@'.format(glade_catalog),
 '------',
  ''
]

message('\n'.join(summary))

